/*
============================================================================
 Name        : dd_idv1_tag.c
 Author      : Jian
 Version     :
 Copyright   : GPL
 Description : dd_idv1_tag.c - source file
============================================================================
*/

/* INCLUDE FILES */
#include "dd_id3v1_tag.h"
#include "dd_log.h"

#include "sd_platform.h"

#define __ID3V1_LEN  128 


dd_id3v1_tag* dd_id3v1_create(sd_file* file, int pos, sd_semp* lock)
{
    dd_id3v1_tag* tag = NULL ;  

    __DD_ASSERT_DEFENSE(tag, return NULL) ;
    __DD_ASSERT_DEFENSE((sizeof(dd_id3v1_tag) == __ID3V1_LEN), return NULL) ;

    tag = (dd_id3v1_tag*)dd_malloc(sizeof(dd_id3v1_tag)) ;
    __DD_CHECK_MEM(tag, sizeof(dd_id3v1_tag), return NULL) ;
    
    if (dd_file_read(file, tag, __ID3V1_LEN, pos, lock) != __ID3V1_LEN) {
        dd_log_warn("failed to create id3v1 for read data error") ;
        goto _error ;
    }

    if (memcmp(&(tag->tagId), "TAG", sizeof(tag->tagId) ) != 0) {
        dd_log_trace("not id3v1 tag found") ;
        goto _error ;
    }
    
    return tag ;

    _error:
    dd_destroy(tag) ;
    return NULL ;
}

void dd_id3v1_destroy(dd_id3v1_tag* tag) 
{
    __DD_ASSERT_DEFENSE(tag, return) ;
    dd_free(tag) ;
}

/* End of File */
